New functions to set the colormap or visual of an existing widget. These
authorOwen Taylor <otaylor@redhat.com>
Tue, 26 Jan 1999 01:15:47 +0000 (01:15 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Tue, 26 Jan 1999 01:15:47 +0000 (01:15 +0000)
Mon Jan 25 20:05:22 1999  Owen Taylor  <otaylor@redhat.com>

* gtk/gtkwidget.c (gtk_widget_set_{visual,colormap}):
New functions to set the colormap or visual
of an existing widget. These functions should not
be called on a widget that has previosly been
realized.

* gtk/gtkcolorsel.c (gtk_color_selection_dialog_init):
Set the visual and colormap on the toplevel dialog,
then push them for the child widgets. As opposed
to push/pop in _new(), this way, things will work
properly with gtk_widget_new().

gtk/gtkcolorsel.c
gtk/gtkwidget.c

index 79618e74d83b9edf4b8f848c8c26c6802e6e61dc..a7240a66ee830097c8e2c736f78d6eeb13c76d84 100644 (file)
@@ -1615,6 +1615,12 @@ gtk_color_selection_dialog_init (GtkColorSelectionDialog *colorseldiag)
 {
   GtkWidget *action_area, *frame;
 
+  gtk_widget_set_visual (GTK_WIDGET (colorseldiag), gdk_rgb_get_visual ());
+  gtk_widget_set_colormap (GTK_WIDGET (colorseldiag), gdk_rgb_get_cmap ());
+
+  gtk_widget_push_visual (gdk_rgb_get_visual ());
+  gtk_widget_push_colormap (gdk_rgb_get_cmap ());
+
   colorseldiag->main_vbox = gtk_vbox_new (FALSE, 10);
   gtk_container_set_border_width (GTK_CONTAINER (colorseldiag), 10);
   gtk_container_add (GTK_CONTAINER (colorseldiag), colorseldiag->main_vbox);
@@ -1650,6 +1656,9 @@ gtk_color_selection_dialog_init (GtkColorSelectionDialog *colorseldiag)
   GTK_WIDGET_SET_FLAGS (colorseldiag->help_button, GTK_CAN_DEFAULT);
   gtk_box_pack_start (GTK_BOX (action_area), colorseldiag->help_button, TRUE, TRUE, 0);
   gtk_widget_show (colorseldiag->help_button);
+
+  gtk_widget_pop_colormap ();
+  gtk_widget_pop_visual ();
 }
 
 GtkWidget *
@@ -1657,14 +1666,8 @@ gtk_color_selection_dialog_new (const gchar *title)
 {
   GtkColorSelectionDialog *colorseldiag;
 
-  gtk_widget_push_visual (gdk_rgb_get_visual ());
-  gtk_widget_push_colormap (gdk_rgb_get_cmap ());
-
   colorseldiag = gtk_type_new (gtk_color_selection_dialog_get_type ());
   gtk_window_set_title (GTK_WINDOW (colorseldiag), title);
 
-  gtk_widget_pop_colormap ();
-  gtk_widget_pop_visual ();
-
   return GTK_WIDGET (colorseldiag);
 }
index 6bda63275f3f5c3031abab24c40bc0ff8db6b8d5..b00272d14f88ed10fbc03ba791da06edc4a1e50f 100644 (file)
@@ -1015,19 +1015,11 @@ gtk_widget_init (GtkWidget *widget)
   colormap = gtk_widget_peek_colormap ();
   visual = gtk_widget_peek_visual ();
   
-  /* XXX - should we ref the colormap and visual, too? */
-
   if (colormap != gtk_widget_get_default_colormap ())
-    {
-      /* gdk_colormap_ref (colormap); */
-      gtk_object_set_data (GTK_OBJECT (widget), colormap_key, colormap);
-    }
+    gtk_widget_set_colormap (widget, colormap);
 
   if (visual != gtk_widget_get_default_visual ())
-    {
-      /* gdk_visual_ref (visual); */
-      gtk_object_set_data (GTK_OBJECT (widget), visual_key, visual);
-    }
+    gtk_widget_set_visual (widget, visual);
 }
 
 /*****************************************
@@ -3912,6 +3904,59 @@ gtk_widget_get_visual (GtkWidget *widget)
   return gtk_widget_get_default_visual ();
 }
 
+/*****************************************
+ * gtk_widget_set_colormap:
+ *    Set the colormap for the widget to the given
+ *    value. Widget must not have been previously
+ *    realized. This probably should only be used
+ *    from an init() function.
+ *   arguments:
+ *    widget:
+ *    colormap:
+ *   results:
+ *****************************************/
+
+void
+gtk_widget_set_colormap (GtkWidget *widget, GdkColormap *colormap)
+{
+  g_return_if_fail (widget != NULL);
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+  g_return_if_fail (!GTK_WIDGET_REALIZED (widget));
+  g_return_if_fail (colormap != NULL);
+
+  /* FIXME: reference count the colormap.
+   */
+  
+  gtk_object_set_data (GTK_OBJECT (widget), 
+                      colormap_key,
+                      colormap);
+}
+
+/*****************************************
+ * gtk_widget_set_visual:
+ *    Set the colormap for the widget to the given
+ *    value. Widget must not have been previously
+ *    realized. This probably should only be used
+ *    from an init() function.
+ *   arguments:
+ *    widget:
+ *    visual:
+ *   results:
+ *****************************************/
+
+void
+gtk_widget_set_visual (GtkWidget *widget, GdkVisual *visual)
+{
+  g_return_if_fail (widget != NULL);
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+  g_return_if_fail (!GTK_WIDGET_REALIZED (widget));
+  g_return_if_fail (visual != NULL);
+  
+  gtk_object_set_data (GTK_OBJECT (widget), 
+                      visual_key,
+                      visual);
+}
+
 /*****************************************
  * gtk_widget_get_events:
  *